Model 關連性
關連:一對一
關連:一對多
關連:多對多
在了解model關聯之前
1.關聯關係,兩端都要寫好。
2.model的名字是單數,controller是複數。
3.blong_to後面是單數小寫。has_many後面是複數。
4.Model 所提供的方法是讓Model之間建立連結,不是資料表之間。
(第2點和第3點是Rails 的慣例,在 Rails 中我們會盡量遵守「慣例優於設定」(CoC, Convention over Configuration)的原則,順著預設的慣例做,可以省下不少麻煩。)
資料表關聯設計
ActiveRecord可以用Associations來定義資料表之間的關聯性,這是最被大家眼睛一亮ORM功能。
關聯式資料庫的特性,那就是透過primary key和foreign keys將資料表互相關連起來。
關聯的方法:
» has_one
» has_many
» belongs_to
» has_many :through
» has_and_belongs_to_many
每位使用者(User)可以開一家店(Store)。
第一步:建立User 和 Store 兩個Model 和 資料表rails g model User name email tel
這個指令會建立User的model,並且有一個name的欄位、email的欄位、tel的欄位,且型態皆為字串。rails g model Store title tel address user_id:integer
這個指令會建立Store的model,並且有一個title的欄位、address的欄位、tel的欄位,且型態皆為字串。還有user_id 這個欄位且型態是整數。
user_id 這個欄位主要的用途是用來對應到 User Model 的 id 欄位,又稱它叫外部鍵(Foreign Key)。
這個欄位要叫什麼名字都可以,但在 Rails 裡的慣例,是「要被對到的那個 Model 的名字」加上 _id。
並不是加上這個之後就會有關連!
在輸入以上兩行指令只會建立model,並聰明的在db裡面建立兩個migrate檔案,但真正的資料庫表還沒有建立。
所以我們還要輸入 rake db:migrate
讓資料庫表建立起來。
這樣Rails會將migrate的檔案執行,建立出兩個我們剛才輸入的資料庫表
第二步建立關聯
因為Model是翻譯員,我們透過Model去跟資料庫要資料。
建立好關係後,要去要資料的話。
Model的User 會去問 Model的Store ,這個時候Store去找他的資料表裡有沒有user_id是user的。
一間商店(Store)可以賣很多商品(Product)
第一步:建立Product的Model 和 資料表rails g model Product name description:text price:decimal is_available:boolean store_id:integer
這個指令會建立Product的model,會產生
name的欄位型態為字串。
description的欄位型態為文字。
price的欄位型態為數字。(數字型態會有小數點)
is_available的欄位型態為布林。
store_id的欄位型態為整數。(因為要讓 Product 可以對應到 Store)
記得輸入 rake db:migrate
讓資料庫表建立起來。
第二步建立關聯
此時Model之間的關聯圖
參考資料
為你自己學 Ruby on Rails
Ruby on Rails 實戰聖經